[電話予約の無人化]Amazon Connect + GPT-4 Turboで、発話の「時刻と日付」の言い回しをどの程度認識してくれるか調査 – Amazon Connect アドベントカレンダー 2023
Amazon Connect アドベントカレンダー 2023、4日目の記事です!
クラスメソッドとギークフィードさん、スカイアーチHRソリューションズ さんの有志が募ってチャレンジしている企画になります。
(アドベントカレンダーのカレンダー一覧はこちら↓)
はじめに
Amazon Connect + GPT-4 Turbo JSONモード + Whisper の構成で、発話での「時刻と日付」の言い回しをどこまで正しく認識してくれるか調査しました。
以前、電話予約の無人化をAmazon Connect + GPT-4 JSONモード + Whisperで構築し、1回の発話で予約情報を正しく認識してくれるか、という記事を執筆しました。
上記の記事では、下記の5つの予約情報を発話し、正しく抽出されました。
- お名前
- 電話番号
- 予約日
- 予約時間
- 人数
処理の流れは、顧客がConnectの電話番号から予約を発話し、Whipserで文字起こしした内容から、GPT-4 JSONモードで予約情報を抽出するといった内容です。詳細は、先程の記事をご確認下さい。
文字起こしされた発話内容から、GPT-4 Turbo JSON モードで5つの予約情報を抽出するのですが、その中でも、「予約の日付」と「予約の時間」は、日本語で色々な言い回しがありますので、どれだけ正しく抽出できるか、今回検証しました。
前提
- 2023年11月時点での検証内容です。今後のアップデートにより改善される可能性があります。恒久的な結果ではありません。
- 今回は、いくつかのサンプルで検証を行っただけであり、他のサンプルでも同様の結果となるとは限りません。これらの結果は一例として参照ください。
- 利用するモデルは、
gpt-4-1106-preview
です。あくまでもプレビュー版のため、GA版になると検証結果が変わる可能性があります。
構築
Lambdaのコードなども含めて、下記の記事通りに構築しました。
試してみる
色々な言い回しでも予約情報を抽出してくれるか検証しました。
プロンプトは下記の通りです。(先程の記事の抜粋です)
def extract_json_format(input_text): input_text = f""" ## 役割 あなたは、お客さんのお問い合わせから、予約するために必要な情報を抽出し、JSON形式で出力するシステムです。 ## ルール - お客さんからのお問い合わせから、下記の5つ抽出して、例を参考にJSON形式で出力ください。 - 「名前(name)」 - 名前は、ひらがな、に変換ください。 - 「電話番号(phone_number)」 - 電話番号にハイフン(-)は必要ないので、削除してください。数字のみを出力ください。 - 「予約の日付(date)」 - 「予約の日付(day)」は、8桁の数字での日付形式(例"20231118")に変換してください。 - 今日の日付は、{current_date}、です。「予約の日付(date)」は、未来の値です。 - 例 3日と言われたら、今月の3日のことです。もし今月の3日が過ぎていれば、翌月の3日です。 - 例 5月と言われたら、今年の5月のことです。今年の5月が過ぎていれば、翌年の5月です。 - 今日の予約も可能です。 - 月曜日が週の最初で週末は土日を指します。 - 「予約時間(time)」 - 予約可能日時は、9:00 ~ 20:00です。 - 5時と言われたら、0500ではなく、1700のことです。 - 今の時間は、{current_time}、です。「予約の時間(time)」は、未来の値です。 - 今から予約も可能です。 - 「人数(number)」 - 分からない場合、値はnullにしてください。 - JSON形式以外は出力しないでください。 ## 例 {{ "name": "やまだいちろう", "phone_number": "09011111111", "date": "20231120", "time": "1430", "number": "2", }} ## お問い合わせ {input_text} """
ポイントは2点あります。
1点目は、今日の日付と今の時間をプロンプトに加える点です。
加えない場合、「今日」と発話すると、「2023年4月〇〇日」と変換されます。
おそらく、GPT-4 Turboの学習データには2023年4月までの情報が含まれているため、「2023年4月〇〇日」に変換されたと推測します。
そのため、現在の日付と現在時刻をプロンプトに加える必要があります。
2点目は、予約可能時間(9:00 ~ 20:00)を伝えることです。
伝えない場合、「5時」と発話すると、05:00と認識してしまいます。
予約可能時間を伝えることで、「5時」と発話すると、「17時」と変換してくれます。
予約時間
プロンプトにも記載していますが、予約可能時間は、9時~20時にしています。
予約する際、時刻に対する発話での言い回しと、GPT-4 JSONモードでの予約情報の抽出と変換の検証結果は、下記の通りです。
発話内容 | GPT-4 JSONモードでの 抽出と変換 |
判定 |
---|---|---|
5時 | 1700 | ◯ |
9時頃 | 0900 | ◯ |
9時半 | 0930 | ◯ |
18時20分 | 1820 | ◯ |
今から | 1346 | ◯(13:46に検証) |
30分後 | 1418 | ◯(13:48に検証) |
3時間後 | 1649 | ◯(13:49に検証) |
午前9時 | 0900 | ◯ |
午前12時 | 1200 | ◯ |
午後0時 | 1200 | ◯ |
0時 | null | ◯ |
正午 | 1200 | ◯ |
朝一 | 0900 | ◯ |
開店時間 | 0900 | ◯ |
最終予約時間 | 2000 | ◯ |
最後の時間 | 2000 | ◯ |
明日のこの時間 | 1408 | ◯(14:08に検証) |
色々な言い回しを検証しましたが、正しく日付を抽出と変換したことが確認できました。
もし、予約を受け付ける時間が30分単位の場合、プロンプトで30分単位に変換するのは難しかったので、コードで処理してあげるとよいでしょう。
「朝一」や「明日のこの時間」、「最後の時間」もプロンプト次第で、正しく抽出と変換をしてくれました。
予約日付
予約する際、日付に対する発話での言い回しと、GPT-4 JSONモードでの予約情報の抽出と変換の検証結果は、下記の通りです。
11月22日(水曜日)に行いました。
発話内容 | GPT-4 JSONモードでの 抽出と変換 |
判定 |
---|---|---|
今日 | 20231122 | ◯ |
明日 | 20231123 | ◯ |
明後日(あさって) | 20231124 | ◯ |
明明後日(しあさって) | 20231125 | ◯ |
水曜日 | 20231122 | ◯ |
今週の水曜日 | 20231122 | ◯ |
来週の月曜日 | 20231127 | ◯ |
月末の木曜日 | 20231130 | ◯ |
来月の月末の木曜日 | 20231228 | ◯ |
8日 | 20231208 | ◯ |
27日 | 20231127 | ◯ |
3日後 | 20231125 | ◯ |
こちらも色々な言い回しを検証しましたが、正しく日付を抽出と変換したことが確認できました。
「明明後日」は、Whisperで「しあさって」とひらがなに文字起こしされましたが、正しく抽出し、日付に変換されました。
最後に
Amazon Connect + GPT-4 JSONモード + Whisper の構成で、発話での「時刻と日付」の言い回しをどこまで正しく認識してくれるか調査しました。
結果としては、色々な言い回しも正しく認識してくれましたので、予約情報の聞き取りの無人対応は現実的に可能だと考えます。
どなたかの参考になれば幸いです。